package com.chenfan.mcn.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chenfan.mcn.model.AeRoyalties;
import com.chenfan.mcn.model.dto.*;
import com.chenfan.mcn.model.vo.AeRoyaltiesVO;
import com.chenfan.mcn.model.common.PageInfo;
import com.chenfan.mcn.model.vo.AeRoyaltiesVoV2;

import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.List;

/**
 * @Author chenguopeng
 * @Date 2021/6/7 10:29
 * Description: AE提成单
 */
public interface AeRoyaltiesService extends IService<AeRoyalties> {

    /**
     * A提成单列表
     *
     * @param aeRoyaltiesDTO
     * @param status
     * @return
     */
    PageInfo<AeRoyaltiesVO> getPage(AeRoyaltiesDTO aeRoyaltiesDTO, Integer status);

    /**
     *组装导出数据
     * @param exportList
     */
    void assembleExportData(List<AeRoyaltiesVoV2> exportList);


    /**
     * AE提成单确认详情列表
     *
     * @param aeDetailDTO
     * @return
     */
    JSONObject getAeDetail(AeDetailDTO aeDetailDTO);


    /**
     * A提成单详情列表
     *
     * @param aeRoyaltiesDTO
     * @return
     */
    JSONObject getPageView(AeRoyaltiesDTO aeRoyaltiesDTO);

    /**
     * 创建AE提成单
     *
     * @param aeQuarterlyTableDTO
     * @return
     */
    Integer create(AeQuarterlyTableDTO aeQuarterlyTableDTO);

    /**
     * 修改AE提成单
     *
     * @param aeRoyaltiesUpdateDTO
     * @return
     */
    Integer update(AeRoyaltiesUpdateDTO aeRoyaltiesUpdateDTO);

    /**
     * 计算季度账单总值
     *
     * @param aeQuarterlyId
     * @return
     */
    BigDecimal getTotalMoney(Long aeQuarterlyId);

    /**
     * 批量刪除AE执行单
     *
     * @param ids
     * @return
     */
    Boolean batchDelete(List<Long> ids);

    /**
     * 详情导出excel
     *
     * @param aeRoyaltiesExportDTO
     * @param response
     * @throws Exception
     */
    void exportExcel(AeRoyaltiesExportDTO aeRoyaltiesExportDTO, HttpServletResponse response) throws Exception;

    /**
     * 发送提成单
     *
     * @param aeDetailDTO
     */
    void sendCommission(AeDetailDTO aeDetailDTO);

}
